/*
 * Consultas.java
 *
 * Creada el 27 de noviembre de 2007, 06:42 PM
 *
 */

package FachadaDatos;

import CapaLogica.*;
import java.util.*;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import FachadaInterfaz.*;

/**
 *
 * @author Solware
 */
public class Consultas {
    
    public static UsuarioServidor usuarioValido(String nick, String pass)
    throws ServletException, IOException {
        Conexion.conectar();
        
        int id;
        String nombre;
        String apellido;
        String telefono;
        String email;
        String profesion;
        int perfil;
        String password;
        String nickname;
        int seccion;
        
        UsuarioServidor usr;
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM usuario_servidor WHERE nickname = '"+nick+"' AND password = '"+pass+"'");
            
            if ( rst.next() ) {
                id = rst.getInt("id");
                nombre = rst.getString("nombre");
                apellido = rst.getString("apellido");
                telefono = rst.getString("telefono");
                email = rst.getString("email");
                profesion = rst.getString("profesion");
                perfil = rst.getInt("perfil");
                password = rst.getString("password");
                nickname = rst.getString("nickname");
                seccion = rst.getInt("seccion");
            } else {
                Conexion.desconectar();
                return null;
            }
            
            usr = new UsuarioServidor(id, nombre, apellido, telefono, email,
                    profesion, perfil, password, nickname, seccion);
            Conexion.desconectar();
            return usr;
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        Conexion.desconectar();
        return null;
    }
    
    public static int idUsuarioServidor(String nickname)
    {        
        int id = -1;
        Conexion.conectar();                  
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT id FROM usuario_servidor "
                    +"WHERE (nickname = '"+nickname+"')");           
            if(rst.next())           
                id = rst.getInt("id");                 
            stmt.close();            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }        
        return id;
    }    
    
    
    
    public static Vector ultimasNSolicitudes(int idUsuario, int nSolicitudes, int codigo)
    throws ServletException, IOException {
        
        Vector solicitudes = new Vector();
        Conexion.conectar();
        
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            
            String query = "SELECT solicitud.id, solicitud.descripcion, " +
                    "solicitud.solicitante, solicitud.cola, " +
                    "solicitud.pos_cola, solicitud.prioridad, " +
                    "solicitud.estado, solicitud.fecha_realizacion, " +
                    "solicitud.hora_realizacion, solicitud_es_asignada_usuario_servidor.fecha_asignacion, " +
                    "solicitante.nombre, solicitante.apellido " +
                    "FROM solicitud, solicitud_es_asignada_usuario_servidor, solicitante " +
                    "WHERE solicitud.id = solicitud_es_asignada_usuario_servidor.solicitud " +                  
                    "AND solicitud.solicitante = solicitante.id ";
             if (codigo == 1) {
                    int idEdoRechazado = idEstadoSolicitud("Rechazada");                   
                    query = query.concat("AND NOT (solicitud.estado = '" + 
                            idEdoRechazado + "') ");
            }
            query = query.concat("AND solicitud.id = SOME(SELECT solicitud "+
                    "FROM solicitud_es_asignada_usuario_servidor " +
                    "WHERE usuario_servidor = '"+idUsuario+"') " +
                    "ORDER BY fecha_realizacion ASC, hora_realizacion ASC");           
            
            ResultSet rst = stmt.executeQuery(query);
            int i = 0;
            java.util.Date fecha_asignacion;
            
            while(rst.next() && i != nSolicitudes) {
                
                Solicitud sol = new Solicitud();
                Solicitante ste = new Solicitante();
                
                /* setear los datos de la solicitud traida de la base de datos */
                sol.setId(rst.getInt("id"));
                sol.setDescripcion(rst.getString("descripcion"));
                sol.setSolicitante(rst.getInt("solicitante"));
                sol.setCola(rst.getInt("cola"));
                sol.setPosCola(rst.getInt("pos_cola"));
                sol.setPrioridad(rst.getInt("prioridad"));
                sol.setEstado(rst.getInt("estado"));
                sol.setFechaRealizacion(rst.getDate("fecha_realizacion"));
                sol.setHoraRealizacion(rst.getString("hora_realizacion"));
                
                /* setear los datos del solicitante traido de la base de datos */
                ste.setNombre(rst.getString("nombre"));
                ste.setApellido(rst.getString("apellido"));
                
                /* setear la fecha de asignacion de la solicitud */
                fecha_asignacion = rst.getDate("fecha_asignacion");
                
                /* agregar los objetos creados al vector 'solicitudes' */
                solicitudes.add(sol);                   // agrego la solicitud
                solicitudes.add(fecha_asignacion);      // agrego la fecha de asignacion
                solicitudes.add(ste);                   // agrego el usuario solicitante
                
                i++;
                
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return solicitudes;
    }
    
    
    public static Vector ultimasNSolicitudesEstados(int idUsuario, int nSolicitudes, int codigo, int estado)
    throws ServletException, IOException {
        
        Vector solicitudes = new Vector();
        Conexion.conectar();
        
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            
            String query = "SELECT solicitud.id, solicitud.descripcion, " +
                    "solicitud.solicitante, solicitud.cola, " +
                    "solicitud.pos_cola, solicitud.prioridad, " +
                    "solicitud.estado, solicitud.fecha_realizacion, " +
                    "solicitud.hora_realizacion, solicitud_es_asignada_usuario_servidor.fecha_asignacion, " +
                    "solicitante.nombre, solicitante.apellido " +
                    "FROM solicitud, solicitud_es_asignada_usuario_servidor, solicitante " +
                    "WHERE solicitud.id = solicitud_es_asignada_usuario_servidor.solicitud " +                  
                    "AND solicitud.solicitante = solicitante.id ";
             if (codigo == 1) {
                    int idEdoRechazado = idEstadoSolicitud("Rechazada");                   
                    query = query.concat("AND NOT (solicitud.estado = '" + 
                            idEdoRechazado + "') ");
            }
            query = query.concat("AND solicitud.id = SOME(SELECT solicitud "+
                    "FROM solicitud_es_asignada_usuario_servidor " +
                    "WHERE usuario_servidor = '"+idUsuario+"') " +
                    "ORDER BY fecha_realizacion ASC, hora_realizacion ASC");           
            
            ResultSet rst = stmt.executeQuery(query);
            int i = 0;
            java.util.Date fecha_asignacion;
            
            while(rst.next() && i != nSolicitudes) {
                
                Solicitud sol = new Solicitud();
                Solicitante ste = new Solicitante();
                
                /* setear los datos de la solicitud traida de la base de datos */
                sol.setId(rst.getInt("id"));
                sol.setDescripcion(rst.getString("descripcion"));
                sol.setSolicitante(rst.getInt("solicitante"));
                sol.setCola(rst.getInt("cola"));
                sol.setPosCola(rst.getInt("pos_cola"));
                sol.setPrioridad(rst.getInt("prioridad"));
                sol.setEstado(rst.getInt("estado"));
                sol.setFechaRealizacion(rst.getDate("fecha_realizacion"));
                sol.setHoraRealizacion(rst.getString("hora_realizacion"));
                
                /* setear los datos del solicitante traido de la base de datos */
                ste.setNombre(rst.getString("nombre"));
                ste.setApellido(rst.getString("apellido"));
                
                /* setear la fecha de asignacion de la solicitud */
                fecha_asignacion = rst.getDate("fecha_asignacion");
                
                /* agregar los objetos creados al vector 'solicitudes' */
                if (sol.getEstado()==estado){
                solicitudes.add(sol);                   // agrego la solicitud
                solicitudes.add(fecha_asignacion);      // agrego la fecha de asignacion
                solicitudes.add(ste);                   // agrego el usuario solicitante
                }
                i++;
                
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return solicitudes;
    }
    
    
    public static int usuarioAsignado(int idSol)
    throws ServletException, IOException {
        
        int idUsr = -1;            
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT usuario_servidor FROM "+
                    "solicitud_es_asignada_usuario_servidor WHERE (solicitud =" +
                    +idSol+")");                        
            while(rst.next()) {                
                idUsr = rst.getInt("usuario_servidor");               
            }            
            stmt.close();           
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }        
        return idUsr;
    }
        
    public static Vector solicitantes(int numRegistros) {
        
        Vector solicitantes = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre, apellido FROM solicitante";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next() && i < numRegistros) {
                Solicitante s = new Solicitante();
                s.setId(rst.getInt("id"));
                s.setNombre(rst.getString("nombre"));
                s.setApellido(rst.getString("apellido"));
                
                solicitantes.add(s);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return solicitantes;
    }
    
    public static Vector prioridades() {
        
        Vector prioridades = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT * FROM prioridad";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                Prioridad p = new Prioridad();
                p.setId(rst.getInt("id"));
                p.setNombre(rst.getString("nombre"));
                p.setDescripcion(rst.getString("descripcion"));
                
                prioridades.add(p);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return prioridades;
    }
    
    public static Vector tiposSolicitante() {
        
        Vector tipos = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT * FROM tipo_solicitante";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
         while (rst.next())  {
                TipoSolicitante ts = new TipoSolicitante();
                ts.setId(rst.getInt("id"));
                ts.setNombre(rst.getString("nombre"));
                ts.setDescripcion(rst.getString("descripcion"));
                
                tipos.add(ts);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return tipos;
    }
    
    public static Vector tiposRecurso() {
        
        Vector tipos = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT * FROM tipo_recurso";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                TipoRecurso tr = new TipoRecurso();
                tr.setId(rst.getInt("id"));
                tr.setNombre(rst.getString("nombre"));
                tr.setDescripcion(rst.getString("descripcion"));
                
                tipos.add(tr);
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return tipos;
    }
    
    public static Vector marcasRecurso() {
        
        Vector tipos = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre FROM marca_recurso";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                MarcaRecurso mr = new MarcaRecurso();
                mr.setId(rst.getInt("id"));
                mr.setNombre(rst.getString("nombre"));
                
                tipos.add(mr);
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return tipos;
    }
    
    public static Vector colas() {
        
        Vector colas = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre FROM cola";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                Cola c = new Cola();
                c.setId(rst.getInt("id"));
                c.setNombre(rst.getString("nombre"));
                
                colas.add(c);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return colas;
    }
    
    public static Vector servicios() {
        
        Vector svcs = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre FROM servicio";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                Servicio s = new Servicio();
                s.setId(rst.getInt("id"));
                s.setNombre(rst.getString("nombre"));
                
                svcs.add(s);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return svcs;
    }
    
    public static Vector secciones() {
        
        Vector secciones = new Vector();
        int i = 0;        
        Conexion.conectar();        // crea una conexion con la base de datos.        
        try {            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre FROM seccion";
            ResultSet rst = stmt.executeQuery(sqlquery);            
            while (rst.next()) {
                Seccion s = new Seccion();
                s.setId(rst.getInt("id"));
                s.setNombre(rst.getString("nombre"));                
                secciones.add(s);                
                i++;
            }            
            stmt.close();       // libera los recursos asignados para el query.            
        } catch (SQLException ex) {            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;            
        }        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return secciones;
    }
    
    public static Vector departamentos() {
        
        Vector departamentos = new Vector();
        int i = 0;        
        Conexion.conectar();        // crea una conexion con la base de datos.        
        try {            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT * FROM departamento";
            ResultSet rst = stmt.executeQuery(sqlquery);            
            while (rst.next()) {
                Departamento d = new Departamento();
                d.setId(rst.getInt("id"));
                d.setNombre(rst.getString("nombre"));
                d.setDescripcion(rst.getString("descripcion"));
                departamentos.add(d);
                i++;
            }            
            stmt.close();       // libera los recursos asignados para el query.            
        } catch (SQLException ex) {            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;            
        }        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return departamentos;
    }
    
    public static Vector perfiles() {
        
        Vector perfiles = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre FROM perfil";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                Perfil p = new Perfil();
                p.setId(rst.getInt("id"));
                p.setNombre(rst.getString("nombre"));
                
                perfiles.add(p);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return perfiles;
    }
    
    public static Vector recursos() {
        
        Vector recursos = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre FROM recurso";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                Recurso r = new Recurso();
                r.setId(rst.getInt("id"));
                r.setNombre(rst.getString("nombre"));
                
                recursos.add(r);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return recursos;
    }
    
    public static Vector usuarioServidor() {
        
        Vector usrs = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre, apellido FROM usuario_servidor"+
                    " WHERE NOT (id = '-1')";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                UsuarioServidor u = new UsuarioServidor();
                u.setId(rst.getInt("id"));
                u.setNombre(rst.getString("nombre"));
                u.setApellido(rst.getString("apellido"));
                
                usrs.add(u);
                
                i++;
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return usrs;
    }
    
    public static Seccion getSeccion(int seccionID) {
        
        Seccion secc = new Seccion();
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT * FROM seccion WHERE id = '"+ seccionID +
                              "'";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                
                secc.setId(rst.getInt("id"));
                secc.setNombre(rst.getString("nombre"));
                secc.setDescripcion(rst.getString("descripcion"));
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return secc;
    }
    
    public static int posicionSiguienteCola(Cola cola) {
        
        int idCola = cola.getId();
        int posCola = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT pos_cola FROM solicitud WHERE cola = '"+ idCola +
                              "' ORDER BY pos_cola DESC";
            
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            if (rst.next())
                posCola = rst.getInt("pos_cola") + 1;
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return -1;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return posCola;
        
    }
    public static Vector getCamposAsociados(final Servicio s) {
        
        Vector out = new Vector();
        CampoSolicitud cs;
        
        int id = s.getId();
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT id, nombre, tipo_dato, longitud " +
                              "FROM   servicio_tiene_campo_solicitud AS s1, " +
                              "       campo_solicitud AS s2 " +
                              "WHERE  s1.campo_solicitud = s2.id " +
                              "       AND s1.servicio = '" + id + "'";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                
                /* Creo un nuevo objeto CampoSolicitud y le asigno lo que *
                 * traje de la base de datos.                             */
                cs = new CampoSolicitud();
                cs.setId(rst.getInt("id"));
                cs.setNombre(rst.getString("nombre"));
                cs.setTipoDato(rst.getString("tipo_dato"));
                cs.setLongitud(rst.getInt("longitud"));
                
                /* Meto el objeto CampoSolicitud en el Vector out */
                out.add(cs);
            }
            
            stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return out;
    }
    
    
    public static Vector getCampoValorAsociado(int idSol, int idServ) {
        
        Vector out = new Vector();                
        Conexion.conectar();       // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT s2.nombre AS nombre, s3.valor AS valor " +
                              "FROM servicio_tiene_campo_solicitud AS s1, " +
                              "campo_solicitud AS s2, solicitud_posee_campo_solicitud AS s3 " +
                              "WHERE  s1.campo_solicitud = s2.id " +
                              "AND s1.servicio = '" + idServ + "' "+
                              "AND s3.campo_solicitud = s2.id "+
                              "AND s3.solicitud = '" + idSol + "'";       
            
            ResultSet rst = stmt.executeQuery(sqlquery);            
            while (rst.next()) {                                 
                out.add(rst.getString("nombre"));
                out.add(rst.getString("valor"));
                System.out.println("se agrego algo");
                
            }            
            //stmt.close();       // libera los recursos asignados para el query.
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return out;
    }
    
    public static Vector getRecursosAsociados(int idServ) {
        
        Vector out = new Vector();                
        Conexion.conectar();       // crea una conexion con la base de datos.
        
        try {            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT r.nombre AS nombre, r.tipo_recurso AS tipo, "+
                              "r.numero_bien AS numero " +
                              "FROM servicio_incluye_recurso AS s, recurso AS r " +
                              "WHERE  s.recurso = r.id "+
                              "AND s.servicio = '" + idServ + "'";            
            ResultSet rst = stmt.executeQuery(sqlquery);            
            while (rst.next()) {                                 
                out.add(rst.getString("nombre"));
                out.add(rst.getString("tipo"));
                out.add(rst.getString("numero"));                
            }            
            //stmt.close();       // libera los recursos asignados para el query.            
        } catch (SQLException ex) {            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;            
        }        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return out;
    }
    
    public static Estado intEstado(int id_estado) throws ServletException, IOException {
        
        Estado e = new Estado();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            
            ResultSet rst = stmt.executeQuery("SELECT nombre, descripcion " +
                                              "FROM   estado " +
                                              "WHERE  id = '" + id_estado
                                              + "' ");
            
            while(rst.next()) {
                
                e.setId(id_estado);
                e.setNombre(rst.getString("nombre"));
                e.setDescripcion(rst.getString("descripcion"));
                
            }
            
            stmt.close();
            
        } catch (Exception ex) {
            
            Conexion.desconectar();
            ex.printStackTrace();
            return null;
            
        }
        
        return e;
    }
    
    public static Solicitante detallesSolicitante (int id) 
        throws SQLException {
        Solicitante s = new Solicitante();        
        Conexion.conectar();
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM solicitante WHERE"+
                    " (id = "+id+")");
            if (rst.next()) {
                s.setId(id);
                s.setNombre(rst.getString("nombre"));
                s.setApellido(rst.getString("apellido"));
                s.setTelefono(rst.getInt("telefono"));
                s.setEmail(rst.getString("email"));
                s.setTipo(rst.getInt("tipo_solicitante"));
            }
        } catch (SQLException e) {}
        return s;
    }
    
    public static Solicitud verSolicitud (java.util.Date fecha_realizacion, 
            String hora_realizacion, String descripcion)
    throws ServletException, IOException 
    {
        
        Solicitud sol = new Solicitud();
        
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM solicitud WHERE (fecha_realizacion = '"+
                    fecha_realizacion+"' AND hora_realizacion = '"+hora_realizacion+
                    "' AND descripcion = '"+descripcion+"')");
            
        if (rst.next() ) {
                sol.setId(rst.getInt("id"));
                sol.setDescripcion(rst.getString("descripcion"));
                sol.setSolicitante(rst.getInt("solicitante"));
                sol.setCola(rst.getInt("cola"));
                sol.setPosCola(rst.getInt("pos_cola"));
                sol.setPrioridad(rst.getInt("prioridad"));
                sol.setEstado(rst.getInt("estado"));
                sol.setFechaRealizacion(rst.getDate("fecha_realizacion"));
                sol.setHoraRealizacion(rst.getString("hora_realizacion"));
        }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return sol;     
        
    }
    
    public static String tipoSolicitante (int id) {
        String s = "";
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT nombre FROM tipo_solicitante"+
                    " WHERE (id = "+id+")");
            if (rst.next())
                s = rst.getString("nombre");            
            }
        catch (SQLException e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return s;
    }
    
    public static Solicitud verDetallesSolicitud (int id)
    throws ServletException, IOException 
    {        
        Solicitud sol = new Solicitud();        
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM solicitud WHERE (id = '"+
                    id+"')");            
        if (rst.next() ) {
                sol.setId(rst.getInt("id"));
                sol.setDescripcion(rst.getString("descripcion"));
                sol.setSolicitante(rst.getInt("solicitante"));
                sol.setCola(rst.getInt("cola"));
                sol.setPosCola(rst.getInt("pos_cola"));
                sol.setPrioridad(rst.getInt("prioridad"));
                sol.setEstado(rst.getInt("estado"));
                sol.setFechaRealizacion(rst.getDate("fecha_realizacion"));
                sol.setHoraRealizacion(rst.getString("hora_realizacion"));
        }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }        
        return sol;       
    }
    
    public static String[] verCamposSolicitud (int idSol)
    throws ServletException, IOException 
    {        
        String[] Campo = new String[2];   //Pos 0: nomreCampo, Pos 1: valor        
        int idCampo = -1;
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT campo_solicitud, valor FROM solicitud_posee_campo_solicitud WHERE (solicitud = "+idSol+" )");
            
            if (rst.next() ) {
                idCampo = (rst.getInt("campo_solicitud"));
                Campo[1] = (rst.getString("valor"));              
            }
            ResultSet rst1 = stmt.executeQuery("SELECT nombre FROM campo_solicitud WHERE (id = "+idCampo+" )");
            if (rst1.next() ) {
                Campo[0] = (rst1.getString("nombre"));              
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return Campo;       
        
    }

    public static String EstadoSolicitud (int idEdo)
    throws ServletException, IOException 
    {        
        String nombreEdo = "";
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT nombre FROM estado WHERE (id = "+idEdo+" )");
            
            if (rst.next() ) {
                nombreEdo = (rst.getString("nombre"));
               
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return nombreEdo;
    }
    
    public static int idEstadoSolicitud (String Edo)
    throws ServletException, IOException 
    {        
        int idEdo = -1;
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT id FROM estado WHERE (nombre = '"+Edo+"' )");
            
            if (rst.next() ) {
                idEdo = Integer.parseInt((rst.getString("id")));
               
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return idEdo;
    }
        
    public static String PrioridadSolicitud (int idPrio)
    throws ServletException, IOException 
    {        
        String nombrePrio = "";
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT nombre FROM prioridad WHERE (id = "+idPrio+" )");
            
            if (rst.next() ) {
                nombrePrio = (rst.getString("nombre"));
               
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return nombrePrio;       
        
    }
    
     public static String ColaSolicitud (int idCola)
    throws ServletException, IOException 
    {        
        String nombreCola = "";
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT nombre FROM cola WHERE (id = "+idCola+" )");
            
            if (rst.next() ) {
                nombreCola = (rst.getString("nombre"));
               
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return nombreCola;       
        
    }
     
    public static String[] ServicioSolicitud (int idSol)
    throws ServletException, IOException 
    {        
        String nombreServ = "";
        int idServ = -1;
        Conexion.conectar();
        String[] v = new String[2];
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT servicio FROM solicitud_requiere_servicio WHERE (solicitud = "+idSol+" )");
            
            if (rst.next() ) {
                idServ = (rst.getInt("servicio"));
                v[0] = (""+idServ);               
            }
            ResultSet rst1 = stmt.executeQuery("SELECT nombre FROM servicio WHERE (id = "+idServ+" )");
            if (rst1.next() ) {
                nombreServ = (rst1.getString("nombre"));
               v[1] = (nombreServ);
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return v;       
        
    }

    
    public static Vector serviciosDelSistema()
    throws ServletException, IOException {
        
        Vector servicios = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM servicio");
            
                  
            while(rst.next()) {
                
                Servicio srvc = new Servicio();
                
                /* setear los datos de la solicitud traida de la base de datos */
                srvc.setId(rst.getInt("id"));
                srvc.setNombre(rst.getString("nombre"));
                srvc.setDescripcion(rst.getString("descripcion"));
                servicios.add(srvc);
                               
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return servicios;
    }
    
    public static Vector buscarSolicitudes(String clave)
    throws ServletException, IOException {
        
        Vector solicitudes = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT solicitud.id AS idSol, solicitud.descripcion, " +
                    "solicitud.solicitante, solicitud.cola, " +
                    "solicitud.pos_cola, solicitud.prioridad, " +
                    "solicitud.estado, solicitud.fecha_realizacion, " +
                    "solicitud.hora_realizacion, solicitud_es_asignada_usuario_servidor.fecha_asignacion, " +
                    "solicitante.nombre, solicitante.apellido, estado.nombre, estado.id " +
                    "FROM solicitud, solicitud_es_asignada_usuario_servidor, solicitante, estado, servicio, solicitud_requiere_servicio " +
                    "WHERE solicitud.id = solicitud_es_asignada_usuario_servidor.solicitud " +
                    "AND solicitud.solicitante = solicitante.id " +
                    "AND solicitud.estado = estado.id AND solicitud_requiere_servicio.solicitud = solicitud.id AND servicio.id = solicitud_requiere_servicio.servicio " +
                    "AND (solicitud.descripcion LIKE '%"+clave+"%'" +
                    "OR solicitante.nombre LIKE '%"+clave+"%'" +
                    "OR solicitante.apellido LIKE '%"+clave+"%'" +
                    "OR estado.nombre LIKE '%"+clave+"%'" +
                    "OR lower(cast(solicitud.solicitante as varchar(20))) LIKE lower('%"+clave+"%')" +
                    "OR lower(cast(solicitud.fecha_realizacion as varchar(20))) LIKE lower('%"+clave+"%') OR servicio.nombre LIKE '%"+clave+"%')" +
                    "ORDER BY solicitud.fecha_realizacion DESC");
            
            int i = 0;
            
            while(rst.next()) {
                
                Solicitud sol = new Solicitud();
                
                /* setear los datos de la solicitud traida de la base de datos */
                sol.setId(rst.getInt("idSol"));
                sol.setDescripcion(rst.getString("descripcion"));
                sol.setSolicitante(rst.getInt("solicitante"));
                sol.setCola(rst.getInt("cola"));
                sol.setPosCola(rst.getInt("pos_cola"));
                sol.setPrioridad(rst.getInt("prioridad"));
                sol.setEstado(rst.getInt("estado"));
                sol.setFechaRealizacion(rst.getDate("fecha_realizacion"));
                sol.setHoraRealizacion(rst.getString("hora_realizacion"));
                
                /* agregar los objetos creados al vector 'solicitudes' */
                solicitudes.add(sol);           // agrego la solicitud
                
                i++;
                
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return solicitudes;
    }
    
    public static Vector seccionesDelSistema()
    throws ServletException, IOException {
        
        Vector secciones = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM seccion");
            
                  
            while(rst.next()) {
                
                Seccion secc = new Seccion();
                
                secc.setId(rst.getInt("id"));
                secc.setNombre(rst.getString("nombre"));
                secc.setDescripcion(rst.getString("descripcion"));
                secciones.add(secc);
                               
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return secciones;
    }
    
    public static Vector perfilesDelSistema()
    throws ServletException, IOException {
        
        Vector perfiles = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM perfil");
            
                  
            while(rst.next()) {
                
                Perfil per = new Perfil();
                
                per.setId(rst.getInt("id"));
                per.setNombre(rst.getString("nombre"));
                perfiles.add(per);
                               
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return perfiles;
    }
        
    public static Vector seccionesDeDpto(int idDpto)
    throws ServletException, IOException {
        
        Vector secciones = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM seccion WHERE "+
                    "(departamento = '"+idDpto+"')");            
                  
            while(rst.next()) {                
                Seccion secc = new Seccion();                
                secc.setId(rst.getInt("id"));
                secc.setNombre(rst.getString("nombre"));
                secc.setDescripcion(rst.getString("descripcion"));
                secciones.add(secc);                               
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return secciones;
    }
    
    public static Perfil perfilUsuario (int idUsr)
    throws ServletException, IOException 
    {        
        Perfil permisos = new Perfil(); 
        int idPerfil = -1;
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT perfil FROM usuario_servidor WHERE (id = "+idUsr+" )");
            
            if (rst.next() ) {
                idPerfil = (rst.getInt("perfil"));    
                permisos.setId(idPerfil);
            }
            ResultSet rst1 = stmt.executeQuery("SELECT solicitud, seccion, "
                    +"servicio, recurso, cola, usuario, perfil FROM perfil WHERE "
                    +"(id = "+idPerfil+" )");
            if (rst1.next() ) {
                permisos.setPermisoSolicitud(rst1.getString("solicitud"));   
                permisos.setPermisoSeccion(rst1.getString("seccion"));
                permisos.setPermisoServicio(rst1.getString("servicio"));
                permisos.setPermisoRecurso(rst1.getString("recurso"));
                permisos.setPermisoCola(rst1.getString("cola"));
                permisos.setPermisoUsuario(rst1.getString("usuario"));
                permisos.setPermisoPerfil(rst1.getString("perfil"));
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return permisos;       
        
    }
   
    public static Perfil verDetallesPerfil (int idPer)
    throws ServletException, IOException 
    {        
        Perfil permisos = new Perfil(); 
        int idPerfil = idPer;
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
           
            ResultSet rst1 = stmt.executeQuery("SELECT solicitud, seccion, "
                    +"servicio, recurso, cola, usuario, perfil, nombre FROM perfil WHERE "
                    +"(id = "+idPerfil+" )");
            if (rst1.next() ) {
                permisos.setNombre(rst1.getString("nombre"));
                permisos.setPermisoSolicitud(rst1.getString("solicitud"));   
                permisos.setPermisoSeccion(rst1.getString("seccion"));
                permisos.setPermisoServicio(rst1.getString("servicio"));
                permisos.setPermisoRecurso(rst1.getString("recurso"));
                permisos.setPermisoCola(rst1.getString("cola"));
                permisos.setPermisoUsuario(rst1.getString("usuario"));
                permisos.setPermisoPerfil(rst1.getString("perfil"));
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return permisos;       
        
    }
    
     public static Vector recursosDelSistema()
    throws ServletException, IOException {
        
        Vector recursos = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM recurso");
            
                  
            while(rst.next()) {
                
                Recurso rec = new Recurso();
                
                rec.setId(rst.getInt("id"));
                rec.setNombre(rst.getString("nombre"));
                rec.setDescripcion(rst.getString("descripcion"));
                recursos.add(rec);
                               
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return recursos;
    }
    public static Vector usuariosDelSistema()
    throws ServletException, IOException {
        
        Vector usuarios = new Vector();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("select usuario_servidor.nombre, usuario_servidor.id, "+
                    "usuario_servidor.apellido, usuario_servidor.profesion, " +
                    "seccion.nombre as seccion, perfil.nombre as perfil from "+
                    "usuario_servidor, seccion, perfil where seccion.id = "+
                    "usuario_servidor.seccion and perfil.id = usuario_servidor.perfil");
            
                  
            while(rst.next()) {
                
                UsuarioServidor usuario = new UsuarioServidor();
                
                /* setear los datos de la solicitud traida de la base de datos */
                usuario.setId(rst.getInt("id"));
                usuario.setNombre(rst.getString("nombre"));
                usuario.setApellido(rst.getString("apellido"));
                usuario.setProfesion(rst.getString("profesion"));
                usuario.setNombreseccion(rst.getString("seccion"));
                usuario.setNombreperfil(rst.getString("perfil"));
                //usuario.setEmail(rst.getString("email"));
                usuarios.add(usuario);
                               
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return usuarios;
    }
   
    public static Servicio verDetallesServicio (int id)
    throws ServletException, IOException 
    {        
        Servicio serv = new Servicio();        
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM servicio WHERE (id = '"+
                    id+"')");            
        if (rst.next() ) {
                serv.setId(rst.getInt("id"));
                serv.setDescripcion(rst.getString("descripcion"));
                serv.setNombre(rst.getString("nombre"));
                serv.setSeccion(rst.getInt("seccion"));               
        }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }        
        return serv;       
    }
    
    

    public static Vector estados() {
        
        Vector tipos = new Vector();
        int i = 0;
        
        Conexion.conectar();        // crea una conexion con la base de datos.
        
        try {
            
            Statement stmt = Conexion.conexion.createStatement();
            String sqlquery = "SELECT * FROM estado";
            ResultSet rst = stmt.executeQuery(sqlquery);
            
            while (rst.next()) {
                Estado tr = new Estado();
                tr.setId(rst.getInt("id"));
                tr.setNombre(rst.getString("nombre"));
                tr.setDescripcion(rst.getString("descripcion"));
                
                tipos.add(tr);
            }
            
            stmt.close();       // 
            
        } catch (SQLException ex) {
            
            Conexion.desconectar(); // cierra la conexion con la base de datos.
            ex.printStackTrace();
            return null;
            
        }
        
        Conexion.desconectar();     // cierra la conexion con la base de datos.
        return tipos;
    }
    

    //nuevo ms
        public static UsuarioServidor usuario(int id)
    throws ServletException, IOException {
        Conexion.conectar();
               
        UsuarioServidor usr = new UsuarioServidor();      
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM usuario_servidor "+
                                                "WHERE id = '"+id+"'");            
            if ( rst.next() ) {
                usr.setId(id);
                usr.setNombre(rst.getString("nombre"));
                usr.setApellido(rst.getString("apellido"));
                usr.setTelefono(rst.getString("telefono"));
                usr.setEmail(rst.getString("email"));
                usr.setProfesion(rst.getString("profesion"));
                usr.setPerfil(rst.getInt("perfil"));
                usr.setPassword(rst.getString("password"));
                usr.setNickname(rst.getString("nickname"));
                usr.setSeccion(rst.getInt("seccion"));
            } else {
                Conexion.desconectar();
                return null;
            }                       
            Conexion.desconectar();
            return usr;            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }        
        Conexion.desconectar();
        return null;
    }    
        
        public static Seccion verDetallesSeccion (int id)
    throws ServletException, IOException 
    {        
        Seccion sec = new Seccion();        
        Conexion.conectar();        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT * FROM seccion WHERE (id = '"+
                    id+"')");            
        if (rst.next() ) {
                sec.setId(rst.getInt("id"));
                sec.setDescripcion(rst.getString("descripcion"));
                sec.setNombre(rst.getString("nombre"));
                sec.setDepartamento(rst.getInt("departamento"));               
        }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }        
        return sec;       
    }

public static Vector SolicitudesPorCola(int idUsuario, int nSolicitudes, int codigo, int estado, int idcola)
    throws ServletException, IOException {
        
        Vector solicitudes = new Vector();
        Conexion.conectar();
        
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            
            String query = "SELECT DISTINCT solicitud.id, solicitud.descripcion, " +
                    "solicitud.solicitante, solicitud.cola, " +
                    "solicitud.pos_cola, solicitud.prioridad, " +
                    "solicitud.estado, solicitud.fecha_realizacion, " +
                    "solicitud.hora_realizacion, solicitud_es_asignada_usuario_servidor.fecha_asignacion, " +
                    "solicitante.nombre, solicitante.apellido " +
                    "FROM solicitud, solicitud_es_asignada_usuario_servidor, solicitante, servicio, seccion " +
                    "WHERE solicitud.id = solicitud_es_asignada_usuario_servidor.solicitud " +                  
                    "AND solicitud.solicitante = solicitante.id AND solicitud.cola ='"+idcola+"'";
             if (codigo == 1) {
                    int idEdoRechazado = idEstadoSolicitud("Rechazada");                   
                    query = query.concat("AND NOT (solicitud.estado = '" + 
                            idEdoRechazado + "') ");
            }
            query = query.concat("ORDER BY fecha_realizacion ASC, hora_realizacion ASC");
            System.out.println(query);
            
            ResultSet rst = stmt.executeQuery(query);
            int i = 0;
            java.util.Date fecha_asignacion;
            
            while(rst.next()) {
                
                Solicitud sol = new Solicitud();
                Solicitante ste = new Solicitante();
                                
                /* setear los datos de la solicitud traida de la base de datos */
                sol.setId(rst.getInt("id"));
                sol.setDescripcion(rst.getString("descripcion"));
                sol.setSolicitante(rst.getInt("solicitante"));
                sol.setCola(rst.getInt("cola"));
                sol.setPosCola(rst.getInt("pos_cola"));
                sol.setPrioridad(rst.getInt("prioridad"));
                sol.setEstado(rst.getInt("estado"));
                sol.setFechaRealizacion(rst.getDate("fecha_realizacion"));
                sol.setHoraRealizacion(rst.getString("hora_realizacion"));
                
                /* setear los datos del solicitante traido de la base de datos */
                ste.setNombre(rst.getString("nombre"));
                ste.setApellido(rst.getString("apellido"));
                
                /* setear la fecha de asignacion de la solicitud */
                fecha_asignacion = rst.getDate("fecha_asignacion");
                
                /* agregar los objetos creados al vector 'solicitudes' */
                //if (sol.getEstado()==estado){
                solicitudes.add(sol);                   // agrego la solicitud
                solicitudes.add(fecha_asignacion);      // agrego la fecha de asignacion
                solicitudes.add(ste);                   // agrego el usuario solicitante
               // }
                i++;
                
            }
            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return solicitudes;
    }
    


public static Vector buscarSolicitudesAvanzada(boolean recurso, boolean servicio,
        boolean usuario, boolean descripcion, boolean ci_solicitante, 
        boolean nombre_solicitante, int id_prioridad, int id_soltipo, 
        int id_estado, int id_seccion, java.util.Date fecha_inic, java.util.Date fecha_fin, 
        boolean fechaI, boolean fechaF, String clave)
    throws ServletException, IOException {
        
        Vector idsols = new Vector();        
        Conexion.conectar();
        String query = "SELECT DISTINCT solicitud.id  as IdSol, solicitud.fecha_realizacion as Fecha, "
                +"solicitud.descripcion as Descripcion, solicitud.prioridad as Prioridad, solicitud.estado "
                +"as Estado, solicitud.prioridad as Prioridad, solicitud.solicitante FROM ";
        String froms = "solicitud, solicitud_requiere_servicio, servicio, estado";
        String wheres = " (solicitud.id = solicitud_requiere_servicio.solicitud "
                +"AND solicitud_requiere_servicio.servicio = servicio.id AND "
                +"solicitud.estado = estado.id) ";
       try {
            Statement stmt = Conexion.conexion.createStatement();
            //Concatenacion de tablas de checkboxes seleccionados
            if (recurso) {
                froms += ", servicio_incluye_recurso";
                froms += ", recurso";
                wheres += " AND ( (solicitud.id = solicitud_requiere_servicio.solicitud) "
                        +"AND (solicitud_requiere_servicio.servicio = servicio_incluye_recurso.servicio) "
                        +"AND (servicio_incluye_recurso.recurso = recurso.id) "
                        +"AND (recurso.nombre LIKE '%"+clave+"%') ) ";
            }
            if (servicio){
                wheres += " AND ( (solicitud.id = solicitud_requiere_servicio.solicitud) "
                        +"AND (solicitud_requiere_servicio.servicio = servicio.id) "
                        +"AND (servicio.nombre LIKE '%"+clave+"%') ) ";
            }
            if (usuario){
                froms += ", solicitud_es_asignada_usuario_servidor";
                froms += ", usuario_servidor";
                wheres += " AND ( (solicitud.id = solicitud_es_asignada_usuario_servidor.solicitud) "
                        +"AND (solicitud_es_asignada_usuario_servidor.usuario_servidor = usuario_servidor.id) "
                        +"AND ( (usuario_servidor.nombre LIKE '%"+clave+"%') OR "
                                +"(usuario_servidor.apellido LIKE '%"+clave+"%') ) )";
            }
            if (descripcion){
                wheres += " AND ( solicitud.descripcion LIKE '%"+clave+"%' )";
            }
            if (ci_solicitante){
                froms += ", solicitante";
                wheres += " AND ( ( solicitud.solicitante = solicitante.id) AND "
                        +"( (solicitante.nombre LIKE '%"+clave+"%' ) OR "
                        +"(solicitante.apellido LIKE '%"+clave+"%') ) )";
            }
            if (nombre_solicitante){
                if (!ci_solicitante)
                    froms += ", solicitante";
                wheres += " AND ( ( solicitud.solicitante = solicitante.id) AND "
                        +"( (solicitante.nombre LIKE '%"+clave+"%' ) OR "
                        +"(solicitante.apellido LIKE '%"+clave+"%') ) )";
            }
            //Concatenacion de tablas de refinamiento
            if (!(id_prioridad==-1)){  
                wheres += " AND (solicitud.prioridad = '"+id_prioridad+"') ";
            }
            if (!(id_estado==-1)){ 
                wheres += " AND (solicitud.estado = '"+id_estado+"') ";
            }
            if (!(id_seccion==-1)){
                if (!servicio) {
                    froms += ", solicitud_requiere_servicio";
                }
                wheres += " AND ( (solicitud.id = solicitud_requiere_servicio.solicitud) "
                        +"AND (solicitud_requiere_servicio.servicio = servicio.id)"
                        +"AND (servicio.seccion = '"+id_seccion+"') )";
            } 
            if (!(id_soltipo==-1)){
                if (!(ci_solicitante || nombre_solicitante))
                    froms += ", solicitante";   
                wheres += " AND ( (solicitud.solicitante = solicitante.id) "
                        +" AND (solicitante.tipo_solicitante = '"+id_soltipo+"') )";
            }   
            if (fechaI && fechaF) {
                wheres += " AND ( (solicitud.fecha_realizacion BETWEEN '"+fecha_inic+"' ";
                wheres += " AND '"+fecha_fin+"') )";         
            } else if (fechaI) {
                wheres += " AND (solicitud.fecha_realizacion BETWEEN '"+fecha_inic+"' AND '9999-12-31') ";
            } else if (fechaF) {
                wheres += " AND (solicitud.fecha_realizacion BETWEEN '1900-01-01' AND "+fecha_fin+") "; 
            }
            query += froms + " WHERE ";
            query += wheres + " ORDER BY solicitud.fecha_realizacion DESC";
            
            System.out.println(query);
            ResultSet rst = stmt.executeQuery(query);           
            
            while(rst.next()) {
                Solicitud s = new Solicitud();
                s.setId(rst.getInt("IdSol"));
                s.setDescripcion(rst.getString("Descripcion"));
                s.setFechaRealizacion(rst.getDate("Fecha"));
                s.setEstado(rst.getInt("Estado"));
                s.setPrioridad(rst.getInt("Prioridad"));
                s.setSolicitante(rst.getInt("solicitante"));
                idsols.add(s);
            }            
            stmt.close();
            
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        
        return idsols;
    }

    public static String SeccionSolicitud (int idSec)
    throws ServletException, IOException 
    {        
        String nombreSec = "";
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            ResultSet rst = stmt.executeQuery("SELECT nombre FROM seccion WHERE (id = "+idSec+" )");
            
            if (rst.next() ) {
                nombreSec = (rst.getString("nombre"));
               
            }
        } catch (Exception e) {
            Conexion.desconectar();
            e.printStackTrace();
        }
        return nombreSec;
    }

    public static Departamento intDepartamento(int id_departamento) throws ServletException, IOException {
        
        Departamento d = new Departamento();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            
            ResultSet rst = stmt.executeQuery("SELECT nombre, descripcion " +
                                              "FROM   departamento " +
                                              "WHERE  id = '" + id_departamento
                                              + "' ");
            
            while(rst.next()) {
                
                d.setId(id_departamento);
                d.setNombre(rst.getString("nombre"));
                d.setDescripcion(rst.getString("descripcion"));
                
            }
            
            stmt.close();
            
        } catch (Exception ex) {
            
            Conexion.desconectar();
            ex.printStackTrace();
            return null;
            
        }
        
        return d;
    }
    
    public static Prioridad intPrioridad(int id_prioridad) throws ServletException, IOException {
        
        Prioridad p = new Prioridad();
        Conexion.conectar();
        
        try {
            Statement stmt = Conexion.conexion.createStatement();
            
            ResultSet rst = stmt.executeQuery("SELECT nombre, descripcion " +
                                              "FROM   prioridad " +
                                              "WHERE  id = '" + id_prioridad
                                              + "' ");
            
            while(rst.next()) {
                
                p.setId(id_prioridad);
                p.setNombre(rst.getString("nombre"));
                p.setDescripcion(rst.getString("descripcion"));
                
            }
            
            stmt.close();
            
        } catch (Exception ex) {
            
            Conexion.desconectar();
            ex.printStackTrace();
            return null;
            
        }
        
        return p;
    }
    
}


